using System;
using System.Collections;
using System.Data;
using System.Data.SqlClient;
using Microsoft.ApplicationBlocks.Data;
using Common;
using SystemFrameworks;
using MinCultura.Sipa.DataAccess.AgentesArtes;

namespace MinCultura.Sipa.AgentesArtes
{
	/// <summary>
	/// Clase de acceso a datos para la entidad ART_AGENTES_UBICACION
	/// </summary>
	public class AgentesUbicacion 
	{
		#region Private Data Access Atributes

		private const String AGE_ID_PARAM = "@AGE_ID";
		private const String BAS_ZOP_ID_PARAM = "@BAS_ZOP_ID";
		private const String BAS_ZON_ID_PARAM = "@BAS_ZON_ID";
		private const String AGE_OTRA_CIUDAD_UBICACION_PARAM = "@AGE_OTRA_CIUDAD_UBICACION";
		private const String AGE_AREA_PARAM = "@AGE_AREA";
		private const String AGE_DIRECCION_PARAM = "@AGE_DIRECCION";
		private const String AGE_TIENE_TELEFONO_PARAM = "@AGE_TIENE_TELEFONO";
		private const String AGE_TELEFONO_PARAM = "@AGE_TELEFONO";
		private const String AGE_TIENE_FAX_PARAM = "@AGE_TIENE_FAX";
		private const String AGE_FAX_PARAM = "@AGE_FAX";
		private const String AGE_APARTADO_AEREO_PARAM = "@AGE_APARTADO_AEREO";
		private const String AGE_TIENE_CORREO_ELECTRONICO_PARAM = "@AGE_TIENE_CORREO_ELECTRONICO";
		private const String AGE_CORREO_ELECTRONICO_PARAM = "@AGE_CORREO_ELECTRONICO";
		private const String AGE_PAGINA_WEB_PARAM = "@AGE_PAGINA_WEB";
		private const String AGE_TIENE_CELULAR_PARAM = "@AGE_TIENE_CELULAR";
		private const String AGE_CELULAR_PARAM = "@AGE_CELULAR";

		#endregion Private Data Access Atributes

        #region propiedades

        private string _cadenaConexion;

        public string ConnectionString
        {
            get { return _cadenaConexion; }
            set { _cadenaConexion = value; }
        }

        #endregion

		/// <summary>
		/// Constructor de la clase ARTAGENTESUBICACION
		/// </summary>
        public AgentesUbicacion(string strCadenaConecxion)
        {
            ConnectionString = strCadenaConecxion;
        }
		public AgentesUbicacionData BuscarAgentesUbicacion()
		{
			AgentesUbicacionData response = new AgentesUbicacionData();
			try
			{
				SqlHelper.ExecuteDataTable(ConnectionString, CommandType.StoredProcedure, "PAS_BUSCAR_ART_AGENTES_UBICACION", response);
			}
			catch (SqlException sqlEx)
			{
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_BUSCAR_ART_AGENTES_UBICACION"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorBuscar", this.GetType().FullName)+ ".<br>" + ex.Message, ex);
			}
			if (response.Rows.Count == 0)
				return null;
			return response;
		}


		public AgentesUbicacionData ConsultarAgentesUbicacion(decimal parAGE_ID)
		{
			AgentesUbicacionData response = new AgentesUbicacionData();
			SqlParameter param1 = new SqlParameter(AGE_ID_PARAM, parAGE_ID);
			SqlParameter[] parameters = {param1};
			try
			{
				SqlHelper.ExecuteDataTable(ConnectionString, CommandType.StoredProcedure, "PAS_CONSULTAR_ART_AGENTES_UBICACION",
					response, parameters);
			}
			catch (SqlException sqlEx)
			{
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_CONSULTAR_ART_AGENTES_UBICACION"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorConsultar", this.GetType().FullName)+ ".<br>" + ex.Message, ex);
			}
			if (response.Rows.Count == 0)
				return null;
			return response;
		}

		public void AdicionarAgentesUbicacion(AgentesUbicacionData datos)

		{
			try
			{
				foreach (DataRow row in datos.Rows)
				{
					SqlParameter param1 = new SqlParameter(AGE_ID_PARAM, row[AgentesUbicacionData.AGE_ID_FIELD]);
					SqlParameter param2 = new SqlParameter(BAS_ZOP_ID_PARAM, row[AgentesUbicacionData.BAS_ZOP_ID_FIELD]);
					SqlParameter param3 = new SqlParameter(BAS_ZON_ID_PARAM, row[AgentesUbicacionData.BAS_ZON_ID_FIELD]);
					SqlParameter param4 =
						new SqlParameter(AGE_OTRA_CIUDAD_UBICACION_PARAM, row[AgentesUbicacionData.AGE_OTRA_CIUDAD_UBICACION_FIELD]);
					SqlParameter param5 = new SqlParameter(AGE_AREA_PARAM, row[AgentesUbicacionData.AGE_AREA_FIELD]);
					SqlParameter param6 = new SqlParameter(AGE_DIRECCION_PARAM, row[AgentesUbicacionData.AGE_DIRECCION_FIELD]);
					SqlParameter param7 =
						new SqlParameter(AGE_TIENE_TELEFONO_PARAM, row[AgentesUbicacionData.AGE_TIENE_TELEFONO_FIELD]);
					SqlParameter param8 = new SqlParameter(AGE_TELEFONO_PARAM, row[AgentesUbicacionData.AGE_TELEFONO_FIELD]);
					SqlParameter param9 = new SqlParameter(AGE_TIENE_FAX_PARAM, row[AgentesUbicacionData.AGE_TIENE_FAX_FIELD]);
					SqlParameter param10 = new SqlParameter(AGE_FAX_PARAM, row[AgentesUbicacionData.AGE_FAX_FIELD]);
					SqlParameter param11 =
						new SqlParameter(AGE_APARTADO_AEREO_PARAM, row[AgentesUbicacionData.AGE_APARTADO_AEREO_FIELD]);
					SqlParameter param12 =
						new SqlParameter(AGE_TIENE_CORREO_ELECTRONICO_PARAM, row[AgentesUbicacionData.AGE_TIENE_CORREO_ELECTRONICO_FIELD]);
					SqlParameter param13 =
						new SqlParameter(AGE_CORREO_ELECTRONICO_PARAM, row[AgentesUbicacionData.AGE_CORREO_ELECTRONICO_FIELD]);
					SqlParameter param14 = new SqlParameter(AGE_PAGINA_WEB_PARAM, row[AgentesUbicacionData.AGE_PAGINA_WEB_FIELD]);
					SqlParameter param15 = new SqlParameter(AGE_TIENE_CELULAR_PARAM, row[AgentesUbicacionData.AGE_TIENE_CELULAR_FIELD]);
					SqlParameter param16 = new SqlParameter(AGE_CELULAR_PARAM, row[AgentesUbicacionData.AGE_CELULAR_FIELD]);
					SqlParameter[] parameters = {
						param1, param2, param3, param4, param5, param6, param7, param8, param9, param10,
						param11, param12, param13, param14, param15, param16
					};
					SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, "PAS_ADICIONAR_ART_AGENTES_UBICACION",
					                          parameters);
				}
			}
			catch (SqlException sqlEx)
			{
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_ADICIONAR_ART_AGENTES_UBICACION"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorInsertar", this.GetType().FullName)+ ".<br>" + ex.Message, ex);
			}
		}

		public bool Adicionar(AgentesUbicacionData datos, params SqlTransaction[] transaction)
		{
			bool response = false;

			if (datos==null)
			{
				return response;
			}
			try
			{
				foreach (DataRow row in datos.Rows)
				{
					SqlParameter param1 = new SqlParameter(AGE_ID_PARAM, row[AgentesUbicacionData.AGE_ID_FIELD]);
					SqlParameter param2 = new SqlParameter(BAS_ZOP_ID_PARAM, row[AgentesUbicacionData.BAS_ZOP_ID_FIELD]);
					SqlParameter param3 = new SqlParameter(BAS_ZON_ID_PARAM, row[AgentesUbicacionData.BAS_ZON_ID_FIELD]);
					SqlParameter param4 = new SqlParameter(AGE_OTRA_CIUDAD_UBICACION_PARAM, row[AgentesUbicacionData.AGE_OTRA_CIUDAD_UBICACION_FIELD]);
					SqlParameter param5 = new SqlParameter(AGE_AREA_PARAM, row[AgentesUbicacionData.AGE_AREA_FIELD]);
					SqlParameter param6 = new SqlParameter(AGE_DIRECCION_PARAM, row[AgentesUbicacionData.AGE_DIRECCION_FIELD]);
					SqlParameter param7 = new SqlParameter(AGE_TIENE_TELEFONO_PARAM, row[AgentesUbicacionData.AGE_TIENE_TELEFONO_FIELD]);
					SqlParameter param8 = new SqlParameter(AGE_TELEFONO_PARAM, row[AgentesUbicacionData.AGE_TELEFONO_FIELD]);
					SqlParameter param9 = new SqlParameter(AGE_TIENE_FAX_PARAM, row[AgentesUbicacionData.AGE_TIENE_FAX_FIELD]);
					SqlParameter param10 = new SqlParameter(AGE_FAX_PARAM, row[AgentesUbicacionData.AGE_FAX_FIELD]);
					SqlParameter param11 = new SqlParameter(AGE_APARTADO_AEREO_PARAM, row[AgentesUbicacionData.AGE_APARTADO_AEREO_FIELD]);
					SqlParameter param12 = new SqlParameter(AGE_TIENE_CORREO_ELECTRONICO_PARAM, row[AgentesUbicacionData.AGE_TIENE_CORREO_ELECTRONICO_FIELD]);
					SqlParameter param13 = new SqlParameter(AGE_CORREO_ELECTRONICO_PARAM, row[AgentesUbicacionData.AGE_CORREO_ELECTRONICO_FIELD]);
					SqlParameter param14 = new SqlParameter(AGE_PAGINA_WEB_PARAM, row[AgentesUbicacionData.AGE_PAGINA_WEB_FIELD]);
					SqlParameter param15 = new SqlParameter(AGE_TIENE_CELULAR_PARAM, row[AgentesUbicacionData.AGE_TIENE_CELULAR_FIELD]);
					SqlParameter param16 = new SqlParameter(AGE_CELULAR_PARAM, row[AgentesUbicacionData.AGE_CELULAR_FIELD]);
					SqlParameter[] parameters = {
						param1, param2, param3, param4, param5, param6, param7, param8, param9, param10,
						param11, param12, param13, param14, param15, param16
					};
					if (transaction.Length > 0)
					{
						SqlHelper.ExecuteNonQuery(transaction[0], CommandType.StoredProcedure, "PAS_ADICIONAR_ART_AGENTES_UBICACION", parameters);
					}
					else
					{
						SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, "PAS_ADICIONAR_ART_AGENTES_UBICACION", parameters);
					}
				}
				response = true;
			}
			catch (SqlException sqlEx)
			{
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_ADICIONAR_ART_AGENTES_UBICACION"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorInsertar", this.GetType().FullName)+ ".<br>" + ex.Message, ex);
			}
			return response;
		}

		public void ActualizarAgentesUbicacion(AgentesUbicacionData datos)
		{
			try
			{
				foreach (DataRow row in datos.Rows)
				{
					SqlParameter param1 = new SqlParameter(AGE_ID_PARAM, row[AgentesUbicacionData.AGE_ID_FIELD]);
					SqlParameter param2 = new SqlParameter(BAS_ZOP_ID_PARAM, row[AgentesUbicacionData.BAS_ZOP_ID_FIELD]);
					SqlParameter param3 = new SqlParameter(BAS_ZON_ID_PARAM, row[AgentesUbicacionData.BAS_ZON_ID_FIELD]);
					SqlParameter param4 =
						new SqlParameter(AGE_OTRA_CIUDAD_UBICACION_PARAM, row[AgentesUbicacionData.AGE_OTRA_CIUDAD_UBICACION_FIELD]);
					SqlParameter param5 = new SqlParameter(AGE_AREA_PARAM, row[AgentesUbicacionData.AGE_AREA_FIELD]);
					SqlParameter param6 = new SqlParameter(AGE_DIRECCION_PARAM, row[AgentesUbicacionData.AGE_DIRECCION_FIELD]);
					SqlParameter param7 =
						new SqlParameter(AGE_TIENE_TELEFONO_PARAM, row[AgentesUbicacionData.AGE_TIENE_TELEFONO_FIELD]);
					SqlParameter param8 = new SqlParameter(AGE_TELEFONO_PARAM, row[AgentesUbicacionData.AGE_TELEFONO_FIELD]);
					SqlParameter param9 = new SqlParameter(AGE_TIENE_FAX_PARAM, row[AgentesUbicacionData.AGE_TIENE_FAX_FIELD]);
					SqlParameter param10 = new SqlParameter(AGE_FAX_PARAM, row[AgentesUbicacionData.AGE_FAX_FIELD]);
					SqlParameter param11 =
						new SqlParameter(AGE_APARTADO_AEREO_PARAM, row[AgentesUbicacionData.AGE_APARTADO_AEREO_FIELD]);
					SqlParameter param12 =
						new SqlParameter(AGE_TIENE_CORREO_ELECTRONICO_PARAM, row[AgentesUbicacionData.AGE_TIENE_CORREO_ELECTRONICO_FIELD]);
					SqlParameter param13 =
						new SqlParameter(AGE_CORREO_ELECTRONICO_PARAM, row[AgentesUbicacionData.AGE_CORREO_ELECTRONICO_FIELD]);
					SqlParameter param14 = new SqlParameter(AGE_PAGINA_WEB_PARAM, row[AgentesUbicacionData.AGE_PAGINA_WEB_FIELD]);
					SqlParameter param15 = new SqlParameter(AGE_TIENE_CELULAR_PARAM, row[AgentesUbicacionData.AGE_TIENE_CELULAR_FIELD]);
					SqlParameter param16 = new SqlParameter(AGE_CELULAR_PARAM, row[AgentesUbicacionData.AGE_CELULAR_FIELD]);

					SqlParameter[] parameters = {
						param1, param2, param3, param4, param5, param6, param7, param8, param9, param10,
						param11, param12, param13, param14, param15, param16
					};
					SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, "PAS_ACTUALIZAR_ART_AGENTES_UBICACION",
					                          parameters);
				}
			}
			catch (SqlException sqlEx)
			{
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_ACTUALIZAR_ART_AGENTES_UBICACION"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorActualizar", this.GetType().FullName)+ ".<br>" + ex.Message, ex);
			}
		}

		public bool Actualizar(AgentesUbicacionData datos, params SqlTransaction[] transaction)
		{
			int cant = 0;
			bool response=false;
			try
			{
				foreach (DataRow row in datos.Rows)
				{
					SqlParameter param1 = new SqlParameter(AGE_ID_PARAM, row[AgentesUbicacionData.AGE_ID_FIELD]);
					SqlParameter param2 = new SqlParameter(BAS_ZOP_ID_PARAM, row[AgentesUbicacionData.BAS_ZOP_ID_FIELD]);
					SqlParameter param3 = new SqlParameter(BAS_ZON_ID_PARAM, row[AgentesUbicacionData.BAS_ZON_ID_FIELD]);
					SqlParameter param4 =
						new SqlParameter(AGE_OTRA_CIUDAD_UBICACION_PARAM, row[AgentesUbicacionData.AGE_OTRA_CIUDAD_UBICACION_FIELD]);
					SqlParameter param5 = new SqlParameter(AGE_AREA_PARAM, row[AgentesUbicacionData.AGE_AREA_FIELD]);
					SqlParameter param6 = new SqlParameter(AGE_DIRECCION_PARAM, row[AgentesUbicacionData.AGE_DIRECCION_FIELD]);
					SqlParameter param7 =
						new SqlParameter(AGE_TIENE_TELEFONO_PARAM, row[AgentesUbicacionData.AGE_TIENE_TELEFONO_FIELD]);
					SqlParameter param8 = new SqlParameter(AGE_TELEFONO_PARAM, row[AgentesUbicacionData.AGE_TELEFONO_FIELD]);
					SqlParameter param9 = new SqlParameter(AGE_TIENE_FAX_PARAM, row[AgentesUbicacionData.AGE_TIENE_FAX_FIELD]);
					SqlParameter param10 = new SqlParameter(AGE_FAX_PARAM, row[AgentesUbicacionData.AGE_FAX_FIELD]);
					SqlParameter param11 =
						new SqlParameter(AGE_APARTADO_AEREO_PARAM, row[AgentesUbicacionData.AGE_APARTADO_AEREO_FIELD]);
					SqlParameter param12 =
						new SqlParameter(AGE_TIENE_CORREO_ELECTRONICO_PARAM, row[AgentesUbicacionData.AGE_TIENE_CORREO_ELECTRONICO_FIELD]);
					SqlParameter param13 =
						new SqlParameter(AGE_CORREO_ELECTRONICO_PARAM, row[AgentesUbicacionData.AGE_CORREO_ELECTRONICO_FIELD]);
					SqlParameter param14 = new SqlParameter(AGE_PAGINA_WEB_PARAM, row[AgentesUbicacionData.AGE_PAGINA_WEB_FIELD]);
					SqlParameter param15 = new SqlParameter(AGE_TIENE_CELULAR_PARAM, row[AgentesUbicacionData.AGE_TIENE_CELULAR_FIELD]);
					SqlParameter param16 = new SqlParameter(AGE_CELULAR_PARAM, row[AgentesUbicacionData.AGE_CELULAR_FIELD]);

					SqlParameter[] parameters = {
						param1, param2, param3, param4, param5, param6, param7, param8, param9, param10,
						param11, param12, param13, param14, param15, param16
					};
					if (transaction.Length > 0)
						cant += SqlHelper.ExecuteNonQuery(transaction[0], CommandType.StoredProcedure, "PAS_ACTUALIZAR_ART_AGENTES_UBICACION", parameters);
					else
						cant += SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, "PAS_ACTUALIZAR_ART_AGENTES_UBICACION", parameters);
				}
				if (cant > 0)
					response = true;
				else
					response = false;
			}
			catch (SqlException sqlEx)
			{
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_ACTUALIZAR_ART_AGENTES_UBICACION"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorActualizar", this.GetType().FullName)+ ".<br>" + ex.Message, ex);
			}
			return response;
		}

		/// <summary>
		/// Elimina un registro de la entidad Artagentesubicacion
		/// </summary>
		/// <param name="parAGE_ID">Identificador del registro
		public void Eliminar(decimal parAGE_ID, params SqlTransaction[] transaction)
		{			
			try
			{
				SqlParameter param1 = new SqlParameter(AGE_ID_PARAM, parAGE_ID);
				SqlParameter[] parameters = {param1};
				if (transaction.Length > 0)
					SqlHelper.ExecuteNonQuery(transaction[0], CommandType.StoredProcedure, "PAS_ELIMINAR_ART_AGENTES_UBICACION", parameters);
				else
				{
					SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, "PAS_ELIMINAR_ART_AGENTES_UBICACION", parameters);
				}			
			}
			catch (SqlException sqlEx)
			{
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_ELIMINAR_ART_AGENTES_UBICACION"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorEliminar", this.GetType().FullName)+ ".<br>" + ex.Message, ex);
			}		
		}

		/// <summary>
		/// Elimina un registro de la entidad Artagentesubicacion
		/// </summary>
		/// <param name="parAGE_ID">Identificador del registro
		public void EliminarAgentesUbicacion(decimal parAGE_ID)
		{
			try
			{
				SqlParameter param1 = new SqlParameter(AGE_ID_PARAM, parAGE_ID);

				SqlParameter[] parameters = {param1};
				SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, "PAS_ELIMINAR_ART_AGENTES_UBICACION",
				                          parameters);
			}
			catch (SqlException sqlEx)
			{
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_ELIMINAR_ART_AGENTES_UBICACION"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorEliminar", this.GetType().FullName)+ ".<br>" + ex.Message, ex);
			}
		}

		public void EliminarAgentesUbicacion(ArrayList arrIDs)
		{
			SqlConnection objConnection = new SqlConnection(ConnectionString);
			objConnection.Open();
			SqlTransaction objTrans = objConnection.BeginTransaction();

			try
			{
				foreach (object Item in arrIDs)
				{
					SqlParameter param1 = new SqlParameter(AGE_ID_PARAM, decimal.Parse(Item.ToString()));
					SqlParameter[] parameters = {param1};
					SqlHelper.ExecuteNonQuery(objTrans, CommandType.StoredProcedure, "PAS_ELIMINAR_ART_AGENTES_UBICACION", parameters);
				}
				objTrans.Commit();
			}
			catch (SqlException sqlEx)
			{
				objTrans.Rollback();
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_ELIMINAR_ART_AGENTES_UBICACION"), sqlEx);
			}
			catch (Exception ex)
			{
				objTrans.Rollback();
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorEliminar", this.GetType().FullName)+ ".<br>" + ex.Message, ex);
			}
			finally
			{
				objConnection.Close();
			}
		}
	}
}